package xyz.lwm.lazycat.beans;

import lombok.Data;

import java.lang.reflect.Type;
import java.util.function.Function;

/**
 * 实例的构建依赖
 *
 * @author lwm
 */
@Data
public class Dependency implements Function<BeanRefs, Object> {

    /**
     * 获取依赖的应用对象的类型 (构造器或方法的 getDeclaringClass). <br>
     * 无特别意义, 打印日志需要.
     */
    private final Class<?> owner;

    /**
     * 获取依赖的实例名, 优先用名称匹配实例 (bean name)
     */
    private final String name;

    /**
     * 如果名称为空, 使用实例类型获取. <br>
     * 普通实例类型, 集合类型(泛型), 数组类型
     */
    private final Type type;


    @Override
    public Object apply(BeanRefs beanRefs) {
        return beanRefs.get(this).getBean();
    }

}
